﻿using System;
using System.Collections.Generic;

namespace CRM.Database.Model
{
    public partial class Contacts : ISetChangedUser, IGetKeyValue, IGetNamesValues
    {
        #region Implementation of ISetChangedUser

        /// <summary>
        /// Установка пользователя, который сделал изменение
        /// </summary>
        /// <param name="userLogin">Логин пользователя</param>
        public void SetChangedUser(string userLogin)
        {
            if (string.IsNullOrEmpty(userLogin))
                throw new Exception("Логин пользователя не должен быть пустым");

            IdUser = userLogin;
        }

        #endregion

        #region Implementation of IGetKeyValue

        /// <summary>
        /// Получение ключего значения элемента
        /// </summary>
        /// <returns>Ключевое значение</returns>
        public int GetKeyValue()
        {
            return IdContact;
        }

        #endregion

        #region Implementation of IGetNamesValues

        /// <summary>
        /// Получение списка имён
        /// </summary>
        /// <returns>Список имён</returns>
        public List<string> GetNamesValues()
        {
            var result = new List<string>();
            result.Add(Name);
            result.Add(LoginName);

            return result;
        }

        #endregion

        /// <summary>
        /// Проверяет уникальность имени пользователя в контактах.
        /// </summary>
        public bool IsLoginNameValid
        {
            get
            {
                var contactsCol = new ContactsCollection();
                if (string.IsNullOrEmpty(LoginName)) return false;
                foreach (Contacts item in contactsCol.ContactsList)
                {
                    if (item != null)
                        if (item.LoginName != null)
                            if (item.LoginName.Trim().ToUpper() == LoginName.Trim().ToUpper())
                                if (IdContact != item.IdContact)
                                    return false;
                }
                return true;
            }
        }

        /// <summary>
        /// Обновление в базе логина и пароля контакта в объекте БЕЗ проверки уникальности логина в системе 
        /// </summary>
        public bool UpdateLoginAndPassword(string user)
        {
            var contactsCol = new ContactsCollection();
            if (IdContact <= 0) return false;
            var contact = (Contacts) contactsCol.GetItemById(IdContact);
            if (contact == null) return false;
            contact.LoginName = LoginName;
            contact.Pass = Pass;
            return contactsCol.Update(contact, user);
        }
    }
}